#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/timerfd.h>

int main()
{
    // int timerfd_create(int clockid, int flags);  相对时间  默认阻塞
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    if(timerfd < 0) {
        perror("timerfd create error");
        return -1;
    }

    // int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);
    struct itimerspec itime;
    itime.it_value.tv_sec = 3;      // 第一次的超时时间为1秒后
    itime.it_value.tv_nsec = 0;     // 纳秒设置为0
    itime.it_interval.tv_sec = 3;   // 第一次超时后，每次超时的时间间隔
    itime.it_interval.tv_nsec = 0;
    timerfd_settime(timerfd, 0, &itime, nullptr);

    while(1)
    {
        uint64_t times;     // 超时次数
        int ret = read(timerfd, &times, 8);
        if(ret < 0) {
            perror("read error");
            return -1;
        }
        std::cout << "超时了，距离上次超时了 " << times << " 次" << std::endl;
    }

    close(timerfd);

    return 0;
}